﻿using sipfe.model.dataAccess;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace sipfe.model.mante
{
    public class TarifarioManteDAO
    {
        private BDSIPFEEntities db = new BDSIPFEEntities();

        /*
        public List<SIPMaeTarifa> ListarTarifasInpDAO(int nideEmpresa)
        {
            return db.SIPMaeTarifa.Where(x => x.nIdeInstitucion == nideEmpresa).OrderBy(x => x.nIdeNivel).ThenBy(x => x.nIdeConcepto).ThenBy(x => x.nIdeModalidad).ToList();
        }

        public List<SIPMaeTarifa> RegistrarTarifaConvocatoriaDAO(int n_IdeUsuario, int nIdeNivel, int n_IdeConcepto, int nIdeModa, 
            decimal n_CostoTotal, decimal n_PorCubXBeca, decimal n_PorCubXCredito, decimal n_PorOtrasFuentes, int nideEmpresaTarifa)
        {
            DateTime hoy = UtilitariosUtil.FechaHoy();
            SIPMaeTarifa item = new SIPMaeTarifa();
            item.nIdeInstitucion    = nideEmpresaTarifa;
            item.nIdeNivel          = nIdeNivel;
            item.nIdeConcepto       = n_IdeConcepto;
            item.nIdeModalidad      = nIdeModa;
            item.nCostoTotal        = n_CostoTotal;
            item.nPorCubXBeca       = n_PorCubXBeca;
            item.nPorCubXCredito    = n_PorCubXCredito;
            item.nPorOtrasFuentes   = n_PorOtrasFuentes;
            item.nIdeUsuReg         = n_IdeUsuario;
            item.dtFecReg           = DateTime.Now;
            item.dFecIniVig         = hoy;
            db.SIPMaeTarifa.Add(item);
            db.SaveChanges();
            db = new BDSIPFEEntities();
            return db.SIPMaeTarifa.Where(x => x.nIdeInstitucion == nideEmpresaTarifa).OrderByDescending(x=>x.nIdeTarifa).ToList();
        }

        public List<SIPMaeTarifa> ListarTarifarioDetDAO(int ide_Empresa)
        {
            List<SIPMaeTarifa> lista = new List<SIPMaeTarifa>();
            SIPMaeTarifa itemTarifa = null;

            var listaTarifas = (from t1 in db.SIPMaeTarifa
                                     join t2 in db.SIPDetCompendio on t1.nIdeNivel equals t2.nIdeDetalle
                                     join t3 in db.SIPDetCompendio on t1.nIdeConcepto equals t3.nIdeDetalle
                                     join t4 in db.SIPDetCompendio on t1.nIdeModalidad equals t4.nIdeDetalle
                                     where t1.nIdeInstitucion == ide_Empresa
                                     select new { t1.nIdeTarifa, t1.nPorCubXBeca, t1.nPorCubXCredito, t1.nPorOtrasFuentes, t1.nCostoTotal, 
                                         nivel=t2.vNomCorto, concepto=t3.vNomCorto, modalidad=t4.vNomCorto, t1.dFecIniVig, t1.dFecFinVig,
                                     t1.nIdeNivel, t1.nIdeConcepto}
                                        ).OrderBy(x => x.nIdeNivel).ThenBy(x => x.nIdeConcepto);

            foreach (dynamic item in listaTarifas)
            {
                itemTarifa = new SIPMaeTarifa();
                itemTarifa.nIdeTarifa       = item.nIdeTarifa;
                itemTarifa.nPorCubXBeca     = item.nPorCubXBeca;
                itemTarifa.nPorCubXCredito  = item.nPorCubXCredito;
                itemTarifa.nPorOtrasFuentes = item.nPorOtrasFuentes;
                itemTarifa.nCostoTotal      = item.nCostoTotal;
                itemTarifa.vNivel           = item.nivel;
                itemTarifa.vConcepto        = item.concepto;
                itemTarifa.vModalidad       = item.modalidad;
                itemTarifa.dFecIniVig       = item.dFecIniVig;
                itemTarifa.dFecFinVig       = item.dFecFinVig;
                itemTarifa.nIdeNivel        = item.nIdeNivel;
                itemTarifa.nIdeConcepto     = item.nIdeConcepto;
                lista.Add(itemTarifa);
            }

            return lista;
        }

        public int CerrarVigenciaTarifaDAO(decimal nIdeTarifa, DateTime ayer)
        {
            SIPMaeTarifa maeTarifa  = new SIPMaeTarifa();
            maeTarifa               = db.SIPMaeTarifa.Find(nIdeTarifa);
            maeTarifa.dFecFinVig    = ayer;
            db.Entry(maeTarifa).State = EntityState.Modified;            
            db.SaveChanges();
            return (maeTarifa.dFecFinVig != null) ? 1 : 0;
        }

        public decimal verificaTarifaExisteDAO(int nideEmpresa, int nideNivel, int nideConcepto, int nModalidad)
        {
            SIPMaeTarifa maeTarifa = new SIPMaeTarifa();
            maeTarifa = db.SIPMaeTarifa.Where(s => s.nIdeInstitucion == nideEmpresa && s.nIdeNivel == nideNivel && s.nIdeConcepto == nideConcepto 
                        && s.nIdeModalidad == nModalidad && (s.dFecFinVig == null ? DateTime.Now : s.dFecFinVig) >= DateTime.Now && s.dFecIniVig <= DateTime.Now)
                        .FirstOrDefault();

            decimal rpta = 0;
            if (maeTarifa != null)
            {
                rpta = maeTarifa.nIdeTarifa;
            }
            return rpta;
        }
        */
       
    }
}
